Soru & Cevap

Timepicker'dan Alınan Bilgilerle Bildirim Göndermek

19.05.2020 - 03:37

Selamlar dostlar,

Timepicker'dan aldığım bilgilerle Alarm Manager sınıfını kullanarak uygulamaya bildirim göndermek istiyorum. Ama bir türlü başaramadım. Kodlarım aşağıda. Hatam nedir ?

MainActivity. java

package com.info.alarmtetiklemebildirim2018;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;

import java.util.Calendar;

public class MainActivity extends Activity {

    private Calendar calendar;
    private Button buttonBildirimGonder;
    private TimePickerDialog timePickerDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());

        timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
            calendar.set(Calendar.MINUTE,minute);


            }
        }, Calendar.HOUR_OF_DAY, Calendar.MINUTE, true);

        buttonBildirimGonder = (Button) findViewById(R.id.buttonBildirimGonder);


        buttonBildirimGonder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                zamanliliBildirimGonder();
            }
        });


    }

    
    private void zamanliliBildirimGonder() {

        NotificationCompat.Builder builder;

        NotificationManager bildirimYoneticisi =
                (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

        Intent ıntent = new Intent(this,MainActivity.class);

        PendingIntent gidilecekIntent = PendingIntent.getActivity(this,1,ıntent,PendingIntent.FLAG_UPDATE_CURRENT);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            String kanalId = "kanalId";
            String kanalAd = "kanalAd";
            String kanalTanım = "kanalTanım";
            int kanalOnceligi = NotificationManager.IMPORTANCE_HIGH;

            NotificationChannel kanal = bildirimYoneticisi.getNotificationChannel(kanalId);

            if (kanal == null) {
                kanal = new NotificationChannel(kanalId, kanalAd, kanalOnceligi);
                kanal.setDescription(kanalTanım);
                bildirimYoneticisi.createNotificationChannel(kanal);
            }

            builder = new NotificationCompat.Builder(this, kanalId);

            builder.setContentTitle("Başlık")
                    .setContentText("İçerik")
                    .setSmallIcon(R.drawable.resim)
                    .setAutoCancel(true)
                    .setContentIntent(gidilecekIntent);

        } else {

            builder = new NotificationCompat.Builder(this);

            builder.setContentTitle("Başlık")
                    .setContentText("İçerik")
                    .setSmallIcon(R.drawable.resim)
                    .setContentIntent(gidilecekIntent)
                    .setAutoCancel(true)
                    .setPriority(Notification.PRIORITY_HIGH);
        }


        Intent broadcastIntent =
                new Intent(MainActivity.this,BildirimYayinlayici.class);

        broadcastIntent.putExtra("bildirimNesnesi",builder.build());

        PendingIntent gidilecekBroadcast = PendingIntent.getBroadcast(this
                ,0
                ,broadcastIntent
                ,PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager =
                (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),gidilecekBroadcast);



    }



}

 

Burası da Broadcast Receiver sınıfım BildirimYakalayici.java

package com.info.alarmtetiklemebildirim2018;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BildirimYayinlayici extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {

        NotificationManager bildirimYoneticisi = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification bildirim = intent.getParcelableExtra("bildirimNesnesi");

        bildirimYoneticisi.notify(1, bildirim);

    }
}

 

649 Görüntülenme

7 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user sinanx27
sinanx27
22.04.2023 - 06:30

Merhaba,

Kodlarınızda bir hata gözükmüyor. Ancak, zamanlama işlemi için TimePicker'dan seçilen zamanı zamanliliBildirimGonder() fonksiyonu içinde kullanmanız gerekiyor. Şu anki kodlarda zamanlama işlemi yapılıyor, ancak bildirim her zaman uygulama açıldığında gösteriliyor. onTimeSet() fonksiyonu içinde zamanı alarak zamanliliBildirimGonder() fonksiyonunu çağırmalısınız.

Aşağıdaki kodlar, bu düzeltmeler yapılmış halidir:


 

javaCopy code

package com.info.alarmtetiklemebildirim2018; import android.app.Activity; import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.SystemClock; import android.support.v4.app.NotificationCompat; import android.view.View; import android.widget.Button; import android.widget.TimePicker; import java.util.Calendar; public class MainActivity extends Activity { private Calendar calendar; private Button buttonBildirimGonder; private TimePickerDialog timePickerDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);

Profile picture for user shopofturkey
shopofturkey
17.01.2023 - 08:55

Bunun için ChatGPT kullanılabilir mi acaba ? Nazar Boncuk

Profile picture for user customsthis
customsthis
12.01.2023 - 05:30

Burada herhangi bir güncelleme var mı? Çözümü göremiyorum.

Profile picture for user customsthis
customsthis
12.01.2023 - 05:30

Burada herhangi bir güncelleme var mı basket random? Çözümü göremiyorum. 

 

Profile picture for user sevgii
sevgii
30.12.2022 - 12:38

Nasıl çözdünüz acaba?

Profile picture for user reecebobber
reecebobber
19.05.2022 - 10:27

Sending notifications with information received from Timepicker is a great topic and highly useful. it's more realistic than my bob the robber game. The game is only available on the web

Profile picture for user lilywatson1v
lilywatson1v
15.04.2022 - 09:25

Geleceği Yazan kadınlar Android Studio Timepicker'dan Alınan Bilgilerle Bildirim Göndermek android Geleceği yazan kadınlar Soru Cevap Android039 1v1 battle

Cagla Demir
17.01.2023 - 09:41

anlayamadım